package org.example.study3;

import java.util.concurrent.TimeUnit;
// 线程状态
public class Demo_301 {
    public static void main(String[] args) throws InterruptedException {
        // 创建新线程对象，使用Lambda表达式定义线程任务
        Thread thread = new Thread(() -> {
            // 该循环用于模拟线程工作任务（原为耗时操作，现改为带休眠的输出）
            for (int i = 0; i < 500; i++) {
                System.out.println("hello thread..."); // 循环打印消息
                try {
                    TimeUnit.SECONDS.sleep(1); // 每次循环休眠1秒
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });

        // 打印线程启动前的状态（此时尚未调用start()）
        System.out.println("启动之前 :" + thread.getState()); // 预期输出 NEW
        System.out.println("是否存活 :" + thread.isAlive()); // 预期输出 false

        thread.start(); // 启动线程，JVM会调用run()方法

        // 主线程休眠500毫秒，确保子线程进入运行状态
        TimeUnit.MILLISECONDS.sleep(500);

        // 打印线程启动后的状态（此时子线程可能处于TIMED_WAITING状态）
        System.out.println("启动之后 :" + thread.getState()); // 可能输出 TIMED_WAITING
        System.out.println("是否存活 :" + thread.isAlive()); // 预期输出 true

        thread.join(); // 主线程阻塞,调用join()，等待子线程执行完毕

        // 打印线程结束后的状态
        System.out.println("结束之后 :" + thread.getState()); // 预期输出 TERMINATED
        System.out.println("是否存活 :" + thread.isAlive()); // 预期输出 false
    }
}